// 创建通用的crud 接口
module.exports = app => {
  const express = require('express')
  const router = express.Router({
    mergeParams: true
  })


  // 新建分类
  router.post('/', async (req, res) => {
    const model = await req.Model.create(req.body)
    res.send(model)
  })

  // 分类列表数据
  router.get('/', async (req, res) => {
    // // 利用inflection插件处理获取到req.params.resource模块大小写问题
    // const modelName = require('inflection').classify(req.params.resource)
    // // console.log(modelName) // Category
    // const Model = require(`../../models/${modelName}`)
    // 限制每次请求只返回10条数据  populate属性代表着关联查询数据 
    // 因为接口共用性，所以不是每条数据要关联，所以要条件判断
    const queryOptions = {}
    if(req.Model.modelName === 'Category') {
      queryOptions.populate = 'parent'
    }
    const items = await req.Model.find().setOptions(queryOptions).limit(10)
    // const items = await req.Model.find().populate('parent').limit(10)
    res.send(items)
  })

  // 获取指定id 的数据进行编辑
  router.get('/:id', async (req, res) => {
    const modal = await req.Model.findById(req.params.id)
    res.send(modal)
  })
  // 编辑提交进行保存 更新数据
  router.put('/:id', async (req, res) => {
    const modal = await req.Model.findByIdAndUpdate(req.params.id, req.body)
    res.send(modal)
  })

  // 删除列表页分类
  router.delete('/:id', async (req, res) => {
    // 删除之后不需要给他返回值，给客户端一个状态即可
    await req.Model.findByIdAndDelete(req.params.id, req.body)
    res.send({
      success: true
    })
  })

  // 挂载路由
  app.use('/admin/api/rest/:resource',async(req,res,next)=>{
    // 这里是添加一个中间件处理所有Model 模型复用模块
    // 利用inflection插件处理获取到req.params.resource模块大小写问题
    const modelName = require('inflection').classify(req.params.resource)
    // console.log(modelName) // Category
    req.Model = require(`../../models/${modelName}`)  //req.Model表示给请求对象上挂载一个Model ，这样所有的请求就直接用
    next()

  },router)


  // 图片上传
  const multer = require('multer')
  // 上传文件的地址
  const upload = multer({ dest: __dirname + '/../../uploads' })
  // file 是前端传过来的图片字段名
  app.post('/admin/api/upload', upload.single('file'),(req, res) => {
    const file = req.file
    file.url = `http://localhost:3000/uploads/${file.filename}`
    res.send(file)
  })
}




// module.exports = app => {
//   const express = require('express')
//   const router = express.Router()
//   const Category = require('../../models/Category')

//   // 新建分类
//   router.post('/categories', async (req, res) => {
//     const model = await Category.create(req.body)
//     res.send(model)
//   })

//   // 分类列表数据
//   router.get('/categories', async (req, res) => {
//     // 限制每次请求只返回10条数据  populate属性代表着关联查询数据
//     const items = await Category.find().populate('parent').limit(10)
//     res.send(items)
//   })

//   // 获取指定id 的数据进行编辑
//   router.get('/categories/:id', async (req, res) => {
//     const modal = await Category.findById(req.params.id)
//     res.send(modal)
//   })
//   // 编辑提交进行保存 更新数据
//   router.put('/categories/:id', async (req, res) => {
//     const modal = await Category.findByIdAndUpdate(req.params.id, req.body)
//     res.send(modal)
//   })

//   // 删除列表页分类
//   router.delete('/categories/:id', async (req, res) => {
//     // 删除之后不需要给他返回值，给客户端一个状态即可
//     await Category.findByIdAndDelete(req.params.id, req.body)
//     res.send({
//       success: true
//     })
//   })

//   // 挂载路由
//   app.use('/admin/api', router)
// }